/*
 * $Id$
 * @description support ajax calls
 */
$.fn.extend({
    siteAjax:function(methodStr/*POST or GET*/,url,requestParams,successFunction,triggerFunction){
        var dlg=$(this);
        
        var errorFunc=function(jqXHRorDataIOError, textStatus, errorThrown){
            console.log("ajax error");
            console.debug(jqXHRorDataIOError);
            var msg;
            if (jqXHRorDataIOError.error=="server error") {
                msg="Ошибка ввода данных :"+jqXHRorDataIOError.msg;
            } else {
                msg="Ошибка доступа к серверу :"+jqXHRorDataIOError.status+" "+textStatus+errorThrown;
            }
            $().ErrorDialog("uni-dlg-error").addErrorMsg(msg).showDialog();
        }
       
       var ajaxFunc=function(){
            $.ajax({
                url:url,
                type:methodStr,
                data:requestParams,
                success: function(data){
                    if (!data.error) {
                        console.log("ajax success");
                        if (successFunction) {
                            successFunction.call(dlg, data);
                        }
                        if (triggerFunction){
                            triggerFunction.call(dlg,data);
                        } 
                        if (data.Ok) {
                            $().InfoDialog("uni-dlg-info").addInfoMsg("Операция "+data.Ok+" проведена успешно").showDialog().fadeOut(1500);
                        }
                    } else {
                        errorFunc.call(dlg,data)
                    }
                },
                error:errorFunc,
                complete:function(jqXHR, textStatus){
                    console.log("ajax complete");
                    $(".wait",dlg).hide();  //скрыть слой "ожидание загрузки"
                },
                dataType:"json"
            });
        }
        
        if ((requestParams)&&(requestParams["action"]=="del")) { //data (набор параметров запроса) при передаче преобразуется в строку
            $().ConfimDialog("uni-dlg-confim").addConfimMsg("Подтвердите удаление").showDialog().on("Ok.ConfimDialog Cancel.ConfimDialog",function(event){
                if (event.type=="Ok"){
                    ajaxFunc.call(dlg);
                }
            })
        } else {
            ajaxFunc.call(dlg);
        }
    
        return dlg;
    },
    siteAjaxPost:function(url,requestParams,successFunction,triggerFunction){
        var dlg=$(this);
        dlg.siteAjax("POST",url,requestParams,successFunction,triggerFunction);
        return dlg;
    },
    siteAjaxGet:function(url,requestParams,successFunction,triggerFunction){
        var dlg=$(this);
        dlg.siteAjax("GET",url,requestParams,successFunction,triggerFunction);
        return dlg;
    }
});


